<template>
    <div class="px-6">
        <el-form-item label="AI模型" prop="model">
            <models-select
                v-model="formData.llm_models"
                @change="handleChangeModel"
            />
        </el-form-item>
        <el-form-item label="角色词" prop="post_id">
            <el-input
                v-model="formData.prompt_roles"
                placeholder="请详细描述你的角色设定，例如：角色特点和能力"
                type="textarea"
                :rows="5"
            />
        </el-form-item>
        <el-form-item label="引导词" prop="post_id">
            <el-input
                v-model="formData.prompt_limit"
                type="textarea"
                :rows="5"
                :placeholder="'固定的引导内容位于上下文开头，用于调整和引导聊天方向。' +
                    '通过修改该内容，可以控制对话的走向。如果您不了解，请留空，届时采用默认引导词。' +
                    '另外 [[document]] 占位符最终会被替换成引用的内容。'"
            />
            <div class="form-tips">
                该设置会影响到最终提问的效果，不填写将采用默认值。
                <el-button
                    type="primary"
                    link
                    @click="copy(limitPromptExample)"
                >
                    复制示例指令
                </el-button>
            </div>
        </el-form-item>
        <template v-for="(conf, index) in formData.llm_config" :key="index">
            <template v-if="conf.type === 'slider'">
                <el-form-item :label="conf.name" :prop="conf.key">
                    <div class="w-[100%] mb-4">
                        <el-slider
                            v-model="formData.llm_config[index].default"
                            :min="conf.range[0]"
                            :max="conf.range[1]"
                            :step="conf.step"
                            show-input
                        />
                    </div>
                </el-form-item>
            </template>
            <template v-if="conf.type === 'switch'">
                <el-form-item :label="conf.name" :prop="conf.key">
                    <el-switch v-model="formData.llm_config[index].default" />
                </el-form-item>
            </template>
        </template>
    </div>
</template>

<script setup lang="ts">
import { useVModel } from '@vueuse/core'

const props = defineProps<{
    modelValue: Record<string, any>
}>()

const emits = defineEmits<{
    (event: 'update:modelValue', value: Record<string, any>): void
}>()

const { copy } = useCopy()

const formData = useVModel(props, 'modelValue', emits)

/**
 * 处理模型
 *
 * @param data
 * @author zero
 */
const handleChangeModel = (data: any) => {
    formData.value.llm_config = data.config
}

// 智能体提示词
const limitPromptExample =
`## 任务描述
你是一个知识库回答助手，使用 <Reference></Reference> 标记中的内容作为本次对话的参考。
为了是回答结果更精准，你需要用户分析历史对话，综合历史对话和标记内容作为参考再给出答复。

<Reference>
[[document]]
</Reference>

## 回答要求:
  - 如果你不清楚答案，你需要澄清。
  - 严禁提及您是从 <Reference></Reference> 获取的知识。
  - 保持答案与 <Reference></Reference> 中描述的一致。
  - 使用 Markdown 语法优化回答格式。
  - 使用与问题相同的语言回答。`
</script>
